package com.zhangjingcheng.yunyixia.util;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

public class CategoryUtil {

    /**
     * 定义一个常量来表示“其他”类别的ID。
     * 当文件后缀名不在任何预定义类别中时，将使用此ID。
     */
    private static final int OTHER_CATEGORY_ID = 6;

    /**
     * 存储文件后缀名到类别ID的映射关系。
     * - Key: 文件后缀名（不带'.', 小写），例如 "mp4", "jpg", "pdf"。
     * - Value: 对应的类别ID (Integer)。
     * <p>
     * 类别ID定义如下:
     * 1: 视频
     * 2: 音频
     * 3: 图片
     * 4: 文档
     * 5: 压缩包
     * 6: 其他 (由 OTHER_CATEGORY_ID 定义)
     */
    private static final Map<String, Integer> EXTENSION_TO_ID_MAP = new HashMap<>();

    /*
      静态初始化块，在类加载时执行一次，用于填充 EXTENSION_TO_ID_MAP。
      这种方式可以确保映射表在任何方法被调用之前就已经准备好，且只初始化一次。
     */
    static {
        // 1: 视频文件
        Arrays.asList("mp4", "avi", "mkv", "mov", "wmv", "flv", "rmvb", "webm", "m4v",
                        "3gp", "asf", "rm", "mpg", "mpeg", "ts", "vob", "f4v", "mts")
                .forEach(ext -> EXTENSION_TO_ID_MAP.put(ext, 1));
        // 2: 音频文件
        Arrays.asList("mp3", "wav", "flac", "aac", "wma", "ogg", "ape", "m4a",
                        "mid", "midi", "amr", "ac3", "dts", "opus", "caf", "au", "aiff")
                .forEach(ext -> EXTENSION_TO_ID_MAP.put(ext, 2));
        // 3: 图片文件
        Arrays.asList("jpg", "jpeg", "png", "gif", "bmp", "webp", "svg", "tiff", "heic",
                        "ico", "psd", "ai", "eps", "raw", "cr2", "nef", "dng", "tga", "pcx")
                .forEach(ext -> EXTENSION_TO_ID_MAP.put(ext, 3));
        // 4: 文档文件
        Arrays.asList("doc", "docx", "xls", "xlsx", "ppt", "pptx", "pdf", "txt",
                        "html", "htm", "xml", "json", "css", "js", "sql", "md", "log",
                        "rtf", "odt", "ods", "odp", "csv", "ini", "cfg", "conf", "properties",
                        "yaml", "yml", "toml", "tex", "wps", "et", "dps")
                .forEach(ext -> EXTENSION_TO_ID_MAP.put(ext, 4));
        // 5: 压缩包文件
        Arrays.asList("zip", "rar", "7z", "tar", "gz", "bz2", "xz", "lzma", "cab",
                        "ace", "arj", "lzh", "z", "tgz", "tbz2", "iso", "dmg", "pkg")
                .forEach(ext -> EXTENSION_TO_ID_MAP.put(ext, 5));
    }

    /**
     * 根据文件的名称后缀，获取其类别ID和标准化的后缀名。
     *
     * @param suffix
     * @return 文件的类别ID。如果无法识别，则为 {@link #OTHER_CATEGORY_ID}。
     */
    public static Integer getCategoryId(String suffix) {

        // 如果没有有效的后缀，直接返回“其他”类别
        if (suffix.isEmpty()) {
            return OTHER_CATEGORY_ID; // 保持返回类型一致性
        }

        // 从映射中获取类别ID，如果未找到，则默认为“其他”类别

        return EXTENSION_TO_ID_MAP.getOrDefault(suffix, OTHER_CATEGORY_ID);
    }
}
